package com.example.e4.rcp.todo.parts;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import com.example.e4.rcp.todo.events.MyEventConstants;
import com.example.e4.rcp.todo.model.ITodoService;
import com.example.e4.rcp.todo.model.Todo;
public class ManagerPart {
private Button btnNewButton;
private Label lblNewLabel;
private TableViewer viewer;
@Inject
UISynchronize sync;
@Inject
ESelectionService service;
@Inject
ITodoService model;
@PostConstruct
public void createControls(Composite parent, final MWindow window) {
parent.setLayout(new GridLayout(1, false));
btnNewButton = new Button(parent, SWT.NONE);
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Job job = new Job("loading") {
@Override
protected IStatus run(IProgressMonitor monitor) {
List<Todo> list = model.getTodos();
sync.asyncExec(new Runnable() {
@Override
public void run() {
viewer.setInput(model.getTodos());
}
});
return Status.OK_STATUS;
}
};
job.schedule();
}
});
btnNewButton.setText("Load Data");
Text search = new Text(parent, SWT.SEARCH | SWT.CANCEL
| SWT.ICON_SEARCH);
search.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false,
1, 1));
search.setMessage("Filter");
search.addSelectionListener(new SelectionAdapter() {
public void widgetDefaultSelected(SelectionEvent e) {
if (e.detail == SWT.CANCEL) {
Text text = (Text) e.getSource();
text.setText("");
//
}
}
// MORE...
});
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION);
Table table = viewer.getTable();
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
table.setHeaderVisible(true);
table.setLinesVisible(true);
viewer.setContentProvider(ArrayContentProvider.getInstance());
TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setWidth(100);
column.getColumn().setText("Summary");
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Todo todo = (Todo) element;
return todo.getSummary();
}
});
column.setEditingSupport(new EditingSupport(viewer) {
@Override
protected void setValue(Object element, Object value) {
Todo todo = (Todo) element;
todo.setSummary(String.valueOf(value));
viewer.refresh();
}
@Override
protected Object getValue(Object element) {
Todo todo = (Todo) element;
return todo.getSummary();
}
@Override
protected CellEditor getCellEditor(Object element) {
return new TextCellEditor(viewer.getTable(), SWT.NONE);
}
@Override
protected boolean canEdit(Object element) {
return true;
}
});
column = new TableViewerColumn(viewer, SWT.NONE);
column.getColumn().setWidth(100);
column.getColumn().setText("Description");
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Todo todo = (Todo) element;
return todo.getDescription();
}
});
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
service.setSelection(selection.getFirstElement());
}
});
}
@Inject
@Optional
private void getNotified(
@UIEventTopic(MyEventConstants.TOPIC_TODO_ALLTOPICS) String topic) {
if (viewer != null) {
viewer.setInput(model.getTodos());
}
}
@Focus
private void setFocus() {
btnNewButton.setFocus();
}
}